package com.bawei.module_car_space

import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.AutoCompleteTextView
import android.widget.Spinner
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.lifecycleScope
import com.alibaba.android.arouter.facade.annotation.Route
import com.bawei.lib_common.Router
import com.bawei.lib_common.base.BaseActivity
import com.bawei.lib_common.base.state.Empty
import com.bawei.lib_common.base.state.Failed
import com.bawei.lib_common.base.state.Loading
import com.bawei.lib_common.base.state.RequestEvent
import com.bawei.lib_common.base.state.Success
import com.bawei.module_car_space.databinding.ActivityEditBinding
import com.bawei.module_car_space.model.EditModel
import com.bawei.module_car_space.ui.SpaceViewModel
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch

@AndroidEntryPoint
@Route(path = Router.Ui.EditActivity)
class EditActivity : BaseActivity<SpaceViewModel, ActivityEditBinding>() {
    override val mLayoutResId: Int
        get() = R.layout.activity_edit
    override val mViewModel: SpaceViewModel by viewModels()


    override fun initView() {

    }

    override fun initListener() {
        // 找到保存按钮，假设布局里按钮 id 是 btn_save（需根据实际 XML 里的 id 调整）
        mBinding.btnSave.setOnClickListener {
            val editModel = collectEditModel()
            // 这里可做本地保存逻辑，比如存到 SharedPreferences、Room 数据库等
            // 示例：若只是简单打印验证
            Log.d("EditActivity", "保存数据：$editModel")
            // 若想直接调接口上传，也可直接调用 viewModel 的 addSpaceData 方法，看需求决定时机
            // viewModel.addSpaceData(editModel)
        }
    }

    override fun initData() {
        mBinding.carSpaceToolbar.editTrue.setOnClickListener{
            val editModel = collectEditModel()
            mViewModel.addSpaceData(editModel)
            // 可在此处添加加载动画显示，请求结束后隐藏等逻辑
            // 同时，可观察 viewModel 的 spaceResult 数据变化，处理成功或失败逻辑
            lifecycleScope.launch {
                mViewModel.mEditState.collect {
                    when (it) {
                        Empty -> {
                            Log.d("EditActivity", "添加失败")
                        }
                        is Failed -> {

                        }
                        Loading -> {

                        }
                        Success -> {
                            Log.d("EditActivity", "添加成功")
                            finish()
                        }
                    }
                }

            }
        }
    }


    // 假设是传统 View 场景，在 Activity/Fragment 里
    private fun collectEditModel(): EditModel {
        val spaceNumber = mBinding.etSpaceNumber.text.toString() // 车位编号输入框
        val areaName = mBinding.areaSpinner.selectedItem.toString() // 所属区域下拉框
        val spaceType = mBinding.typeSpinner.selectedItem.toString() // 车位类型下拉框
        val spaceStatus = getSelectedStatus() // 自己写方法，从“空闲/已占用/维护中”选框拿值
        val userName = mBinding.etUsername.text.toString() // 使用人
        val licensePlate = mBinding.etLicensePlate.text.toString() // 车牌号
        val remarks = mBinding.etRemarks.text.toString() // 备注
        // 假设 areaId、userId 等需要你从其他地方获取（比如区域下拉框存了 id 映射）
        return EditModel(
            areaId = 1, // 实际要根据所属区域选框的真实 id 填
            areaName = areaName,
            id = 0, // 新增时可能传 0，编辑时传已有 id，看接口约定
            licensePlate = licensePlate,
            remarks = remarks,
            spaceNumber = spaceNumber,
            spaceStatus = spaceStatus,
            spaceType = spaceType,
            userId = 1, // 同理，实际根据使用人关联的 id 填
            userName = userName
        )
    }

    private fun getSelectedStatus(): String {
        // 假设用 RadioGroup 或自定义选中逻辑，返回 "空闲"/"已占用"/"维护中"
        return when {
            mBinding.rbFree.isChecked -> "空闲"
            mBinding.rbOccupied.isChecked -> "已占用"
            mBinding.rbMaintain.isChecked -> "维护中"
            else -> "空闲" // 默认值
        }
    }
}
